#include "windows.h" #include "ras.h" #include "iostream.h" #include "conio.h" void main() { RASCONN ras[20]; DWORD dSize,dNumber; ras[0].dwSize = sizeof(RASCONN); dSize = sizeof( ras ); if( RasEnumConnections( ras, &dSize, &dNumber ) == 0 ) { cout << "Count Ras " << dNumber << endl; for (DWORD x=0; x < dNumber;x++) cout << ras[x].szEntryName << endl; } getch(); }
Мы объявили подключение windows.h для того, чтобы пользоваться типами переменных Windows, например тип DWORD там описан. Подключили ras.h для доступа к описанию функций. iostream.h просто объявление потоков для вывода на экран. Мне удобно, хотя можно и подругому, например stdio.h - printf, но мне так удобнее. Conio.h для функции getch(), она задерживает выполнение программы до нажатия клавиши.
Итак, первым делом мы объявляем массив типа RASCONN из 20 элементов. Почему 20 ? Мне так хочется. Вообще можно сколько угодно. Но на компьютере обычно модем один и соединение одно. Так что больше 2 нужно точно. Почему больше 2 ? В конце при проверке программы увидите ! Эта структура содержит информацию о соединении. Вот так она описана:
typedef struct _RASCONN { DWORD dwSize; HRASCONN hrasconn; TCHAR szEntryName[RAS_MaxEntryName + 1]; #if (WINVER >= 0x400) CHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; CHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; #endif } RASCONN ;Дальше мы объявили две переменные. Они нам понадобятся. Потом в первый элемент структуры в поле dwSize мы поместили размер 1 записи из массива структур, т.е. размер одной структуры. Зачем ? Посмотрите описание структуры, при разных версиях, размер разный. Функция sizeof() как раз этот размер и вычислила. И весь размер массива вычислили. Нужен он дальше.
RasEnumConnections проверяет наличие соединения. Результат у нее как раз не количество соединений, а успешность обращения к динамической библиотеке. Ведь её может не быть или она может быть испорчена. В эту функцию мы передаем массив ras, указатель на размер массива. И указатель на число куда вернется количество соединений. Почему указатель, потому что это будет использовано для возврата результата. Как иначе, если функция возврашает успешность своего вызова?
Если функция выполнена, то в dNumber будет записано количество соединений. Если соединения есть, то в массив вернется о них информация. С помощью for мы пробегаем по массиву и выводим информацию.
А теперь соберите и запустите программу. Если у Вас нет соединения, то на экране появится 0 и будет ждать нажатия клавиши. А теперь запустите соединение. В момент проверки пароля для входа в систему можете запустить программу. Она покажет вам 1 и имя соединения, которое описано в DialUp.
И последнее. Как проверить два соединения с одним модемом. Сделайте соединение с альтернативным именем, чтобы их было два. Запустите с первым именем. После связи. Запустите со вторым. Вот второе и не запустится. Вам сообщат о том, что модем используется - ошибка 6... В этот момент запустите Вашу программу и она покажет два соединения с именами.
Включите описание функций RAS:
#include "ras.h"Создавайте код. RasEnumConnections - говорит только о том выполнилась она или нет. И помните размер структуры RASCONN может быть разным.